# 导入所需的库
import mysql.connector  # 用于连接 MySQL 数据库
import os  # 用于操作文件系统
from MyLife.DBsettings import DATABASES  # 从DBsettings导入数据库配置

# 定义函数以导入 SQL 文件


def import_sql_file(cursor, file_path):
    print(f"Importing file: {file_path}")  # 打印正在导入的文件名
    with open(file_path, 'r', encoding="utf-8") as file:  # 打开 SQL 文件
        sql_script = file.read()  # 读取文件内容
    sql_statements = sql_script.split(';')  # 将 SQL 脚本分割成单独的语句
    for statement in sql_statements:  # 遍历每条 SQL 语句
        if statement.strip():  # 如果语句不为空
            try:
                cursor.execute(statement)  # 执行 SQL 语句
            except mysql.connector.Error as err:  # 如果执行出错
                # 打印错误信息
                print(
                    f"Error occurred while executing SQL in {file_path}: {err}")
                pass

# 定义主函数


def main():
    # 从DBsettings配置文件中获取数据库设置
    db_settings = DATABASES['default']  # 获取默认数据库配置
    db_config = {
        'host': db_settings['HOST'],  # 数据库主机地址
        'user': db_settings['USER'],  # 数据库用户名
        'password': db_settings['PASSWORD'],  # 数据库密码
        'database': db_settings['NAME']  # 数据库名称
    }

    # 尝试建立数据库连接
    try:
        conn = mysql.connector.connect(**db_config)  # 连接数据库
        cursor = conn.cursor()  # 创建游标对象
    except mysql.connector.Error as err:  # 如果连接失败
        # print(f"Error connecting to MySQL: {err}")  # 打印错误信息
        pass
        return

    # 设置 SQL 文件所在的文件夹路径
    folder_path = 'datasets'

    sql_files = [f for f in os.listdir(
        folder_path) if f.endswith('.sql')]  # 列出所有 SQL 文件
    sql_files.sort(key=lambda x: int(
        ''.join(filter(str.isdigit, x))[:3]))  # 根据文件名前两个数字部分排序

    # 按顺序导入每个 SQL 文件
    for file_name in sql_files:
        file_path = os.path.join(folder_path, file_name)  # 拼接完整的文件路径
        import_sql_file(cursor, file_path)  # 导入 SQL 文件
        conn.commit()  # 提交事务

    # 执行完毕后关闭数据库连接
    cursor.close()  # 关闭游标
    conn.close()  # 关闭连接


# 如果脚本被直接运行，则执行主函数
if __name__ == "__main__":
    main()
